package com.msb.lmsc02;

import javax.tools.FileObject;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

//书籍编号 书籍名称 书籍作者
//01       活着      余华
//02     斗罗大陆   唐家三少
public class Test01 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {

        while(true){
            System.out.println("-----欢迎来到【老马书城】----");
            System.out.println("1.展示书籍");
            System.out.println("2.上新书籍");
            System.out.println("3.下架书籍");
            System.out.println("4.退出应用");
            System.out.println("请输入您要执行的操作序号：");

        //键盘录入序号进而判断
            Scanner sc=new Scanner(System.in);
            int choice=sc.nextInt();


            if(choice==1){
                System.out.println("1.展示书籍");
                //从文件中读取BookList
                File f=new File("D:\\java\\code\\txt\\Demo2.txt");
                //优化1
                if(f.exists()==true){
                    FileInputStream fis=new FileInputStream(f);
                    ObjectInputStream ois =new ObjectInputStream(fis);

                    ArrayList BookList=(ArrayList) (ois.readObject());

                    for(int i=0;i<=BookList.size()-1;i++){
                        book b=(book)(BookList.get(i));
                        System.out.println(b.getbNo()+"---"+b.getbName()+"---"+b.getbAuthor());
                    }
                }else{
                    System.out.println("当前无上新书籍请先上新书籍后进行展示");
                }
            }
            if(choice==2){
                System.out.println("2.上新书籍");
                //每上新一本书籍就要创建一个对象
                book b1=new book();
                Scanner b=new Scanner(System.in);
                System.out.println("请输入书籍编号");
                int bNo=b.nextInt();
                System.out.println("请输入书籍名称");
                String bName=b.next();
                System.out.println("请输入书籍作者");
                String bAuthor=b.next();

                b1.setbNo(bNo);
                b1.setbName(bName);
                b1.setbAuthor(bAuthor);
                //优化2：（只要上新书籍每次都会创造一个新集合，覆盖掉之前上新的书籍）
                //解决方案：如果f不存在，第一次上新书籍，（创建一个集合，把每本书添加进去）
                //         如果不是第一次上新书籍，先把之前的内容输出，再写进去
                File f=new File("D:\\java\\code\\txt\\Demo2.txt");
                //优化1
                if(f.exists()==true){
                    FileInputStream fis=new FileInputStream(f);
                    ObjectInputStream ois =new ObjectInputStream(fis);

                    ArrayList BookList=(ArrayList) (ois.readObject());
                    BookList.add(b1);//追加新的对象进集合
//                    File f=new File("D:\\java\\code\\txt\\Demo2.txt");
                    //接管：以对象的方式输出
                    FileOutputStream fos=new FileOutputStream(f);
                    ObjectOutputStream oos=new ObjectOutputStream(fos);

                    //动作：把集合对象输出
                    oos.writeObject(BookList);
                    //把最外层关掉即可
                    oos.close();

                }else{//第一次上新书籍，（创建一个集合，把每本书添加进去）
                    //创建一个集合，把每本书添加进去（不用写在外面了，都是通过文件写入或输出了，不用选择choice以后通过集合操作了）
                    ArrayList BookList=new ArrayList();
                    BookList.add(b1);//将对象放进集合里
                    //将集合作为一个对象写入盘符
//                  File f=new File("D:\\java\\code\\txt\\Demo2.txt");
                    //接管：以对象的方式输出
                    FileOutputStream fos=new FileOutputStream(f);
                    ObjectOutputStream oos=new ObjectOutputStream(fos);

                    //动作：把集合对象输出
                    oos.writeObject(BookList);
                    //把最外层关掉即可
                    oos.close();
                }
            }
            if(choice==3){
                //1.先把集合从文件中取出来
                //2.遍历，删除对应编号
                //3.把新的集合重新存入文件
                System.out.println("3.下架书籍");
                Scanner sca=new Scanner(System.in);
                File f=new File("D:\\java\\code\\txt\\Demo2.txt");
                if(f.exists()==true){
                    FileInputStream fis=new FileInputStream(f);
                    ObjectInputStream ois =new ObjectInputStream(fis);

                    ArrayList BookList=(ArrayList) (ois.readObject());

                    //录入你要下架的书籍编号
                    System.out.println("请输入你要删除的书籍编号");
                    int del=sca.nextInt();

                    //找到对应的书籍再删除
                for (int i=0;i<=BookList.size()-1;i++){
                    book b=(book)(BookList.get(i));
                    if(del==b.getbNo()){
                        //把b这本书删除
                        BookList.remove(b);
                        System.out.println("书籍下架成功");
                        break;//找到了就不必再循环了
                    }
                }

                    //接管：以对象的方式输出
                    FileOutputStream fos=new FileOutputStream(f);
                    ObjectOutputStream oos=new ObjectOutputStream(fos);

                    //动作：把集合对象输出
                    oos.writeObject(BookList);
                    //把最外层关掉即可
                    oos.close();

                }else{
                    System.out.println("当前无书籍无法下架，请先上新书籍");
                }



            }
            if(choice==4){
                System.out.println("4.退出应用");
                break;
            }
        }
    }
}
